package com.artisan.toolcalling.demo;//package com.artisan.demo;
//
//import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
//import com.artisan.service.DateTimeTools;
//import org.springframework.ai.chat.client.ChatClient;
//import org.springframework.ai.chat.model.ChatModel;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
///**
// * Spring AI 工具调用演示类
// * 展示如何使用 @Tool 注解和 ChatClient 实现工具调用功能
// */
//@Component
//public class ToolCallingDemo {
//
//    @Autowired
//    private DateTimeTools dateTimeTools;
//
//    /**
//     * 演示信息检索工具调用
//     * 用户提问："明天是几号？" -> 模型调用 getCurrentDateTime 工具 -> 应用返回当前时间 -> 模型计算并回答
//     */
//    public String demonstrateInformationRetrieval(ChatModel chatModel) {
//        System.out.println("=== 演示1: 信息检索工具调用 ===");
//
//        ChatClient chatClient = ChatClient.create(chatModel)
//                .prompt("What day is tomorrow? Please use the current time to calculate.")
//                .tools(dateTimeTools) // 将工具注册给本次对话
//                .mutate().build();
//
//        String response = chatClient.prompt().call().content();
//        System.out.println("【用户问题】: 明天是几号？");
//        System.out.println("【模型回答】: " + response);
//        System.out.println();
//
//        return response;
//    }
//
//    /**
//     * 演示执行操作工具调用
//     * 用户提问："能帮我设置一个10分钟后的闹钟吗？" -> 模型先调用 getCurrentDateTime 获取当前时间 -> 模型计算出10分钟后的具体时间 -> 模型调用 setAlarm 工具
//     */
//    public String demonstrateActionExecution(ChatModel chatModel) {
//        System.out.println("=== 演示2: 执行操作工具调用 ===");
//
//        ChatClient chatClient = ChatClient.create(chatModel)
//                .prompt("Can you set an alarm 10 minutes from now?")
//                .tools(dateTimeTools) // 将工具注册给本次对话
//                .mutate().build();
//
//        String response = chatClient.prompt().call().content();
//        System.out.println("【用户问题】: 能帮我设置一个10分钟后的闹钟吗？");
//        System.out.println("【模型回答】: " + response);
//        System.out.println("注意：setAlarm方法的输出会直接打印在控制台");
//        System.out.println();
//
//        return response;
//    }
//
//    /**
//     * 演示多轮工具调用
//     * 展示模型如何在一个对话中调用多个工具
//     */
//    public String demonstrateMultipleToolCalls(ChatModel chatModel) {
//        System.out.println("=== 演示3: 多轮工具调用 ===");
//
//        ChatClient chatClient = ChatClient.create(chatModel)
//                .prompt("What's the current time in Beijing? And can you set an alarm for 5 minutes from now?")
//                .tools(dateTimeTools)
//                .mutate()
//                .build();
//
//        String response = chatClient.prompt().call().content();
//        System.out.println("【用户问题】: 北京现在几点？能帮我设置5分钟后的闹钟吗？");
//        System.out.println("【模型回答】: " + response);
//        System.out.println();
//
//        return response;
//    }
//
//    /**
//     * 演示时区工具调用
//     */
//    public String demonstrateTimezoneTool(ChatModel chatModel) {
//        System.out.println("=== 演示4: 时区工具调用 ===");
//
//        ChatClient chatClient = ChatClient.create(chatModel)
//                .prompt("What's the current time in New York and Tokyo?")
//                .tools(dateTimeTools)
//                .mutate()
//                .build();
//
//        String response = chatClient.prompt().call().content();
//        System.out.println("【用户问题】: 纽约和东京现在几点？");
//        System.out.println("【模型回答】: " + response);
//        System.out.println();
//
//        return response;
//    }
//
//    /**
//     * 演示时间计算工具调用
//     */
//    public String demonstrateTimeCalculation(ChatModel chatModel) {
//        System.out.println("=== 演示5: 时间计算工具调用 ===");
//
//        ChatClient chatClient = ChatClient.create(chatModel)
//                .prompt("Calculate the time difference between 2025-01-01T10:00:00 and 2025-01-01T15:30:00")
//                .tools(dateTimeTools)
//                .mutate()
//                .build();
//
//        String response = chatClient.prompt().call().content();
//        System.out.println("【用户问题】: 计算2025-01-01T10:00:00和2025-01-01T15:30:00之间的时间差");
//        System.out.println("【模型回答】: " + response);
//        System.out.println();
//
//        return response;
//    }
//
//    /**
//     * 运行所有演示
//     */
//    public void runAllDemonstrations(ChatModel chatModel) {
//        System.out.println("🚀 开始 Spring AI 工具调用功能演示");
//        System.out.println("=====================================");
//
//        try {
//            demonstrateInformationRetrieval(chatModel);
//            demonstrateActionExecution(chatModel);
//            demonstrateMultipleToolCalls(chatModel);
//            demonstrateTimezoneTool(chatModel);
//            demonstrateTimeCalculation(chatModel);
//
//            System.out.println("✅ 所有演示完成！");
//        } catch (Exception e) {
//            System.err.println("❌ 演示过程中出现错误: " + e.getMessage());
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 创建 Ollama ChatModel 实例（用于独立运行）
//     */
//    public static ChatModel createOllamaChatModel() {
//        return DashScopeChatModel.builder().build();
//
//    }
//
//    /**
//     * 独立运行演示（不依赖Spring容器）
//     */
//    public static void main(String[] args) {
//        System.out.println("🔧 独立运行模式 - 需要确保Ollama服务已启动");
//
//        try {
//            // 创建ChatModel
//            ChatModel chatModel = createOllamaChatModel();
//
//            // 创建工具实例
//            DateTimeTools dateTimeTools = new DateTimeTools();
//
//            // 创建演示实例
//            ToolCallingDemo demo = new ToolCallingDemo();
//            demo.dateTimeTools = dateTimeTools;
//
//            // 运行演示
//            demo.runAllDemonstrations(chatModel);
//
//        } catch (Exception e) {
//            System.err.println("❌ 独立运行失败: " + e.getMessage());
//            System.err.println("请确保：");
//            System.err.println("1. Ollama服务已启动 (http://localhost:11434)");
//            System.err.println("2. llama3.1模型已下载");
//            e.printStackTrace();
//        }
//    }
//}
